/*
todo 测试使用mongoose操作mongodb数据库
1. 连接数据库
  1.1. 引入mongoose
  1.2. 连接指定数据库(URL只有数据库是变化的)
  1.3. 获取连接对象
  1.4. 绑定连接完成的监听(用来提示连接成功)
2. 得到对应特定集合的Model
  2.1. 字义Schema(描述文档结构)
  2.2. 定义Model(与集合对应, 可以操作集合)
3. 通过Model或其实例对集合数据进行CRUD操作
  3.1. 通过Model实例的save()添加数据
  3.2. 通过Model的find()/findOne()查询多个或一个数据
  3.3. 通过Model的findByIdAndUpdate()更新某个数据
  3.4. 通过Model的remove()删除匹配的数据
 */
const md5 = require('blueimp-md5') // md5加密的函数
/*1. 连接数据库*/
// todo 1.1. 引入mongoose  npm install --save mongoose
const mongoose = require('mongoose')
// 1.2. 连接指定数据库(URL只有数据库是变化的)
mongoose.connect('mongodb://101.34.55.248:27017/node-vue-element')
// 1.3. 获取连接对象
const conn = mongoose.connection
// 1.4. 绑定连接完成的监听(用来提示连接成功)
conn.on('connected', function () { // 连接成功回调
    console.log('数据库连接成功, YE!!!')
})
/*2. fixme mongoose.Schema({ })定义表结构 得到对应特定集合的Model*/
// 2.1. 字义Schema(描述文档结构)
const userSchema = mongoose.Schema({ // 指定文档的结构: 属性名/属性值的类型, 是否是必须的, 默认值
    username: {type: String, required: true}, // 用户名
    password: {type: String, required: true}, // 密码
    type: {type: String, required: true}, // 用户类型: dashen/laoban
    header: {type: String}
})
// 2.2. fixme 定义Model(与集合对应, 可以操作集合)
// fixme 集合的名称为: users user可能是关键字，mongo在建表时故意加了一个s  其他表名不会变  数据库不需要建表
const UserModel = mongoose.model('user', userSchema)
/*3. 通过Model或其实例对集合数据进行CRUD操作*/
// 3.1. 通过Model实例的save()添加数据
function testSave() {
    // fixme 创建UserModel的实例
    const userModel = new UserModel({username: '123@qq.com', password: md5('123456'), type: 'laoban'})
    // 调用save()保存
    userModel.save(function (error, user) {
        console.log('save()', error, user)
    })
}
testSave()
// UserModel.find({_id:'60d8610895993d04c4effa54'}, function (error, users) {
//     console.log('find()', error, users)
// })

// 查询一个: 得到是匹配的文档对象, 如果没有匹配的就是null
// UserModel.findOne({_id:'60d89d6c3c1c5627e8dd6b46'}, function (error, user) {
//     console.log('findOne()', error, user)
// })
UserModel.findByIdAndUpdate({_id:'60d8610895993d04c4effa54'},{username:'aaa',password:'123456'} ,
    function (err,oldUser) {
    console.log(err,oldUser)
    })


